package br.com.sgmf.web.managedbean;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.sgmf.enums.Estado;
import br.com.sgmf.model.Endereco;
import br.com.sgmf.model.Fornecedor;
import br.com.sgmf.service.FornecedorService;

@Component
@ManagedBean
@RequestScoped
public class FornecedorBean {

	private static final String FORNECEDOR_SALVO_COM_SUCESSO = "Fornecedor salvo com sucesso!";
	private static final String FORNECEDOR_EXCLUIDO_COM_SUCESSO = "Fornecedor excluído com sucesso!";
	private static final String ERRO_AO_SALVAR_FORNECEDOR = "Erro ao salvar Fornecedor";
	private static final String ERRO_AO_EXCLUIR_FORNECEDOR = "Erro ao excluir Fornecedor";

	private Fornecedor fornecedor;
	private Endereco endereco;
	private List<Fornecedor> fornecedores;

	@Autowired
	private FornecedorService fornecedorService;

	@PostConstruct
	public void inicializar() {
		fornecedor = new Fornecedor();
		endereco = new Endereco();
		fornecedores = fornecedorService.findAll();
	}

	public String salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message;

		try {
			fornecedorService.saveOrUpdate(fornecedor, endereco);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					FORNECEDOR_SALVO_COM_SUCESSO, null);
			inicializar();
		} catch (Exception e) {
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					ERRO_AO_SALVAR_FORNECEDOR, null);
			e.printStackTrace();
		}

		context.addMessage(null, message);
		return null;
	}

	public void novo() {
		fornecedor = new Fornecedor();
		endereco = new Endereco();
	}

	public String editar(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
		this.endereco = fornecedor.getEndereco();
		return null;
	}

	public String excluir(Fornecedor fornecedor) {
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message;

		try {
			fornecedorService.delete(fornecedor);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					FORNECEDOR_EXCLUIDO_COM_SUCESSO, null);
			inicializar();
		} catch (Exception e) {
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					ERRO_AO_EXCLUIR_FORNECEDOR, null);
			e.printStackTrace();
		}

		context.addMessage(null, message);
		return null;
	}

	public Estado[] getEstados() {
		return Estado.values();
	}

	public Fornecedor getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(Fornecedor fornecedor) {
		this.fornecedor = fornecedor;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public List<Fornecedor> getFornecedores() {
		return fornecedores;
	}

	public void setFornecedores(List<Fornecedor> fornecedores) {
		this.fornecedores = fornecedores;
	}

	public FornecedorService getFornecedorService() {
		return fornecedorService;
	}

	public void setFornecedorService(FornecedorService fornecedorService) {
		this.fornecedorService = fornecedorService;
	}

}
